In recent years, distributed computing and distributed algorithms have become prevalent in a wide variety of contexts, for reasons of increased performance and load capacity, high availability and failover and faster access to data. Distributed computing typically involves a number of autonomous computers (also called nodes) in communication with one another to solve a task, such as execute an application, solve complex computational problems or provide users access to various services. Each of the computer nodes typically includes its own processor(s), memory and a communication link to other nodes. The computers can be located within a particular location (e.g. cluster network) or can be connected over a large area network (LAN) such as the Internet. In most cases, distributed computers use messages to communicate with one another and to coordinate task processing and data management.
The management of tasks and other work across the cluster can be a significant concern as the processing load often needs to be distributed or apportioned among the members of the cluster in an efficient manner that does not overload any particular node. Allowing each developer or client application to individually determine where requests should go and how they should be processed can be problematic and can create inconsistencies across the grid when various individuals invoke functions in a disorganized way. Furthermore, software programmers may be unnecessarily forced to learn the complexities and internal configurations of the computing grid before they can apply some cohesion to the distribution of work across the nodes.
In light of the foregoing, what is needed is a more simplified yet efficient framework for the processing of tasks and other work across the cluster or grid. It is desirable that this framework be generalized and transparent to clients in terms of the underlying architecture that will manage the processing load. It is further desirable that the processing of the actual work be managed behind the scenes in an efficient and distributed manner, avoiding single points of failure, latencies and any other problems that may arise in this context. Applicants have identified these as well as numerous other needs in coming to conceive the subject matter of the present application.